/*
 * Copyright (C) 2023 Huawei Device Co., Ltd.
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

export default class MimeUtils {
  /**
   * MIME全部类型映射
   */
  private static MIME_MapTable: Array<Array<string>> = [[".323", "text/h323"],
    [".3gp", "video/3gpp"],
    [".aab", "application/x-authoware-bin"],
    [".aam", "application/x-authoware-map"],
    [".aas", "application/x-authoware-seg"],
    [".acx", "application/internet-property-stream"],
    [".ai", "application/postscript"],
    [".aif", "audio/x-aiff"],
    [".aifc", "audio/x-aiff"],
    [".aiff", "audio/x-aiff"],
    [".als", "audio/X-Alpha5"],
    [".amc", "application/x-mpeg"],
    [".ani", "application/octet-stream"],
    [".apk", "application/vnd.android.package-archive"],
    [".asc", "text/plain"],
    [".asd", "application/astound"],
    [".asf", "video/x-ms-asf"],
    [".asn", "application/astound"],
    [".asp", "application/x-asap"],
    [".asr", "video/x-ms-asf"],
    [".asx", "video/x-ms-asf"],
    [".au", "audio/basic"],
    [".avb", "application/octet-stream"],
    [".avi", "video/x-msvideo"],
    [".awb", "audio/amr-wb"],
    [".axs", "application/olescript"],
    [".bas", "text/plain"],
    [".bcpio", "application/x-bcpio"],
    [".bin ", "application/octet-stream"],
    [".bld", "application/bld"],
    [".bld2", "application/bld2"],
    [".bmp", "image/bmp"],
    [".bpk", "application/octet-stream"],
    [".bz2", "application/x-bzip2"],
    [".c", "text/plain"],
    [".cal", "image/x-cals"],
    [".cat", "application/vnd.ms-pkiseccat"],
    [".ccn", "application/x-cnc"],
    [".cco", "application/x-cocoa"],
    [".cdf", "application/x-cdf"],
    [".cer", "application/x-x509-ca-cert"],
    [".cgi", "magnus-internal/cgi"],
    [".chat", "application/x-chat"],
    [".class", "application/octet-stream"],
    [".clp", "application/x-msclip"],
    [".cmx", "image/x-cmx"],
    [".co", "application/x-cult3d-object"],
    [".cod", "image/cis-cod"],
    [".conf", "text/plain"],
    [".cpio", "application/x-cpio"],
    [".cpp", "text/plain"],
    [".cpt", "application/mac-compactpro"],
    [".crd", "application/x-mscardfile"],
    [".crl", "application/pkix-crl"],
    [".crt", "application/x-x509-ca-cert"],
    [".csh", "application/x-csh"],
    [".csm", "chemical/x-csml"],
    [".csml", "chemical/x-csml"],
    [".css", "text/css"],
    [".cur", "application/octet-stream"],
    [".dcm", "x-lml/x-evm"],
    [".dcr", "application/x-director"],
    [".dcx", "image/x-dcx"],
    [".der", "application/x-x509-ca-cert"],
    [".dhtml", "text/html"],
    [".dir", "application/x-director"],
    [".dll", "application/x-msdownload"],
    [".dmg", "application/octet-stream"],
    [".dms", "application/octet-stream"],
    [".doc", "application/msword"],
    [".docx",
      "application/vnd.openxmlformats-officedocument.wordprocessingml.document"],
    [".dot", "application/msword"],
    [".dvi", "application/x-dvi"],
    [".dwf", "drawing/x-dwf"],
    [".dwg", "application/x-autocad"],
    [".dxf", "application/x-autocad"],
    [".dxr", "application/x-director"],
    [".ebk", "application/x-expandedbook"],
    [".emb", "chemical/x-embl-dl-nucleotide"],
    [".embl", "chemical/x-embl-dl-nucleotide"],
    [".eps", "application/postscript"],
    [".epub", "application/epub+zip"],
    [".eri", "image/x-eri"],
    [".es", "audio/echospeech"],
    [".esl", "audio/echospeech"],
    [".etc", "application/x-earthtime"],
    [".etx", "text/x-setext"],
    [".evm", "x-lml/x-evm"],
    [".evy", "application/envoy"],
    [".exe", "application/octet-stream"],
    [".fh4", "image/x-freehand"],
    [".fh5", "image/x-freehand"],
    [".fhc", "image/x-freehand"],
    [".fif", "application/fractals"],
    [".flr", "x-world/x-vrml"],
    [".flv", "flv-application/octet-stream"],
    [".fm", "application/x-maker"],
    [".fpx", "image/x-fpx"],
    [".fvi", "video/isivideo"],
    [".gau", "chemical/x-gaussian-input"],
    [".gca", "application/x-gca-compressed"],
    [".gdb", "x-lml/x-gdb"],
    [".gif", "image/gif"],
    [".gps", "application/x-gps"],
    [".gtar", "application/x-gtar"],
    [".gz", "application/x-gzip"],
    [".h", "text/plain"],
    [".hdf", "application/x-hdf"],
    [".hdm", "text/x-hdml"],
    [".hdml", "text/x-hdml"],
    [".hlp", "application/winhlp"],
    [".hqx", "application/mac-binhex40"],
    [".hta", "application/hta"],
    [".htc", "text/x-component"],
    [".htm", "text/html"],
    [".html", "text/html"],
    [".hts", "text/html"],
    [".htt", "text/webviewhtml"],
    [".ice", "x-conference/x-cooltalk"],
    [".ico", "image/x-icon"],
    [".ief", "image/ief"],
    [".ifm", "image/gif"],
    [".ifs", "image/ifs"],
    [".iii", "application/x-iphone"],
    [".imy", "audio/melody"],
    [".ins", "application/x-internet-signup"],
    [".ips", "application/x-ipscript"],
    [".ipx", "application/x-ipix"],
    [".isp", "application/x-internet-signup"],
    [".it", "audio/x-mod"],
    [".itz", "audio/x-mod"],
    [".ivr", "i-world/i-vrml"],
    [".j2k", "image/j2k"],
    [".jad", "text/vnd.sun.j2me.app-descriptor"],
    [".jam", "application/x-jam"],
    [".jar", "application/java-archive"],
    [".java", "text/plain"],
    [".jfif", "image/pipeg"],
    [".jnlp", "application/x-java-jnlp-file"],
    [".jpe", "image/jpeg"],
    [".jpeg", "image/jpeg"],
    [".jpg", "image/jpeg"],
    [".jpz", "image/jpeg"],
    [".js", "application/x-javascript"],
    [".jwc", "application/jwc"],
    [".kjx", "application/x-kjx"],
    [".lak", "x-lml/x-lak"],
    [".latex", "application/x-latex"],
    [".lcc", "application/fastman"],
    [".lcl", "application/x-digitalloca"],
    [".lcr", "application/x-digitalloca"],
    [".lgh", "application/lgh"],
    [".lha", "application/octet-stream"],
    [".lml", "x-lml/x-lml"],
    [".lmlpack", "x-lml/x-lmlpack"],
    [".log", "text/plain"],
    [".lsf", "video/x-la-asf"],
    [".lsx", "video/x-la-asf"],
    [".lzh", "application/octet-stream"],
    [".m13", "application/x-msmediaview"],
    [".m14", "application/x-msmediaview"],
    [".m15", "audio/x-mod"],
    [".m3u", "audio/x-mpegurl"],
    [".m3url", "audio/x-mpegurl"],
    [".m4a", "audio/mp4a-latm"],
    [".m4b", "audio/mp4a-latm"],
    [".m4p", "audio/mp4a-latm"],
    [".m4u", "video/vnd.mpegurl"],
    [".m4v", "video/x-m4v"],
    [".ma1", "audio/ma1"],
    [".ma2", "audio/ma2"],
    [".ma3", "audio/ma3"],
    [".ma5", "audio/ma5"],
    [".man", "application/x-troff-man"],
    [".map", "magnus-internal/imagemap"],
    [".mbd", "application/mbedlet"],
    [".mct", "application/x-mascot"],
    [".mdb", "application/x-msaccess"],
    [".mdz", "audio/x-mod"],
    [".me", "application/x-troff-me"],
    [".mel", "text/x-vmel"],
    [".mht", "message/rfc822"],
    [".mhtml", "message/rfc822"],
    [".mi", "application/x-mif"],
    [".mid", "audio/mid"],
    [".midi", "audio/midi"],
    [".mif", "application/x-mif"],
    [".mil", "image/x-cals"],
    [".mio", "audio/x-mio"],
    [".mmf", "application/x-skt-lbs"],
    [".mng", "video/x-mng"],
    [".mny", "application/x-msmoney"],
    [".moc", "application/x-mocha"],
    [".mocha", "application/x-mocha"],
    [".mod", "audio/x-mod"],
    [".mof", "application/x-yumekara"],
    [".mol", "chemical/x-mdl-molfile"],
    [".mop", "chemical/x-mopac-input"],
    [".mov", "video/quicktime"],
    [".movie", "video/x-sgi-movie"],
    [".mp2", "video/mpeg"],
    [".mp3", "audio/mpeg"],
    [".mp4", "video/mp4"],
    [".mpa", "video/mpeg"],
    [".mpc", "application/vnd.mpohun.certificate"],
    [".mpe", "video/mpeg"],
    [".mpeg", "video/mpeg"],
    [".mpg", "video/mpeg"],
    [".mpg4", "video/mp4"],
    [".mpga", "audio/mpeg"],
    [".mpn", "application/vnd.mophun.application"],
    [".mpp", "application/vnd.ms-project"],
    [".mps", "application/x-mapserver"],
    [".mpv2", "video/mpeg"],
    [".mrl", "text/x-mrml"],
    [".mrm", "application/x-mrm"],
    [".ms", "application/x-troff-ms"],
    [".msg", "application/vnd.ms-outlook"],
    [".mts", "application/metastream"],
    [".mtx", "application/metastream"],
    [".mtz", "application/metastream"],
    [".mvb", "application/x-msmediaview"],
    [".mzv", "application/metastream"],
    [".nar", "application/zip"],
    [".nbmp", "image/nbmp"],
    [".nc", "application/x-netcdf"],
    [".ndb", "x-lml/x-ndb"],
    [".ndwn", "application/ndwn"],
    [".nif", "application/x-nif"],
    [".nmz", "application/x-scream"],
    [".nokia-op-logo", "image/vnd.nok-oplogo-color"],
    [".npx", "application/x-netfpx"],
    [".nsnd", "audio/nsnd"],
    [".nva", "application/x-neva1"],
    [".nws", "message/rfc822"],
    [".oda", "application/oda"],
    [".ogg", "audio/ogg"],
    [".oom", "application/x-AtlasMate-Plugin"],
    [".p10", "application/pkcs10"],
    [".p12", "application/x-pkcs12"],
    [".p7b", "application/x-pkcs7-certificates"],
    [".p7c", "application/x-pkcs7-mime"],
    [".p7m", "application/x-pkcs7-mime"],
    [".p7r", "application/x-pkcs7-certreqresp"],
    [".p7s", "application/x-pkcs7-signature"],
    [".pac", "audio/x-pac"],
    [".pae", "audio/x-epac"],
    [".pan", "application/x-pan"],
    [".pbm", "image/x-portable-bitmap"],
    [".pcx", "image/x-pcx"],
    [".pda", "image/x-pda"],
    [".pdb", "chemical/x-pdb"],
    [".pdf", "application/pdf"],
    [".pfr", "application/font-tdpfr"],
    [".pfx", "application/x-pkcs12"],
    [".pgm", "image/x-portable-graymap"],
    [".pict", "image/x-pict"],
    [".pko", "application/ynd.ms-pkipko"],
    [".pm", "application/x-perl"],
    [".pma", "application/x-perfmon"],
    [".pmc", "application/x-perfmon"],
    [".pmd", "application/x-pmd"],
    [".pml", "application/x-perfmon"],
    [".pmr", "application/x-perfmon"],
    [".pmw", "application/x-perfmon"],
    [".png", "image/png"],
    [".pnm", "image/x-portable-anymap"],
    [".pnz", "image/png"],
    [".pot,", "application/vnd.ms-powerpoint"],
    [".ppm", "image/x-portable-pixmap"],
    [".pps", "application/vnd.ms-powerpoint"],
    [".ppt", "application/vnd.ms-powerpoint"],
    [".pptx",
      "application/vnd.openxmlformats-officedocument.presentationml.presentation"],
    [".pqf", "application/x-cprplayer"],
    [".pqi", "application/cprplayer"],
    [".prc", "application/x-prc"],
    [".prf", "application/pics-rules"],
    [".prop", "text/plain"],
    [".proxy", "application/x-ns-proxy-autoconfig"],
    [".ps", "application/postscript"],
    [".ptlk", "application/listenup"],
    [".pub", "application/x-mspublisher"],
    [".pvx", "video/x-pv-pvx"],
    [".qcp", "audio/vnd.qcelp"],
    [".qt", "video/quicktime"],
    [".qti", "image/x-quicktime"],
    [".qtif", "image/x-quicktime"],
    [".r3t", "text/vnd.rn-realtext3d"],
    [".ra", "audio/x-pn-realaudio"],
    [".ram", "audio/x-pn-realaudio"],
    [".rar", "application/octet-stream"],
    [".ras", "image/x-cmu-raster"],
    [".rc", "text/plain"],
    [".rdf", "application/rdf+xml"],
    [".rf", "image/vnd.rn-realflash"],
    [".rgb", "image/x-rgb"],
    [".rlf", "application/x-richlink"],
    [".rm", "audio/x-pn-realaudio"],
    [".rmf", "audio/x-rmf"],
    [".rmi", "audio/mid"],
    [".rmm", "audio/x-pn-realaudio"],
    [".rmvb", "audio/x-pn-realaudio"],
    [".rnx", "application/vnd.rn-realplayer"],
    [".roff", "application/x-troff"],
    [".rp", "image/vnd.rn-realpix"],
    [".rpm", "audio/x-pn-realaudio-plugin"],
    [".rt", "text/vnd.rn-realtext"],
    [".rte", "x-lml/x-gps"],
    [".rtf", "application/rtf"],
    [".rtg", "application/metastream"],
    [".rtx", "text/richtext"],
    [".rv", "video/vnd.rn-realvideo"],
    [".rwc", "application/x-rogerwilco"],
    [".s3m", "audio/x-mod"],
    [".s3z", "audio/x-mod"],
    [".sca", "application/x-supercard"],
    [".scd", "application/x-msschedule"],
    [".sct", "text/scriptlet"],
    [".sdf", "application/e-score"],
    [".sea", "application/x-stuffit"],
    [".setpay", "application/set-payment-initiation"],
    [".setreg", "application/set-registration-initiation"],
    [".sgm", "text/x-sgml"],
    [".sgml", "text/x-sgml"],
    [".sh", "application/x-sh"],
    [".shar", "application/x-shar"],
    [".shtml", "magnus-internal/parsed-html"],
    [".shw", "application/presentations"],
    [".si6", "image/si6"],
    [".si7", "image/vnd.stiwap.sis"],
    [".si9", "image/vnd.lgtwap.sis"],
    [".sis", "application/vnd.symbian.install"],
    [".sit", "application/x-stuffit"],
    [".skd", "application/x-Koan"],
    [".skm", "application/x-Koan"],
    [".skp", "application/x-Koan"],
    [".skt", "application/x-Koan"],
    [".slc", "application/x-salsa"],
    [".smd", "audio/x-smd"],
    [".smi", "application/smil"],
    [".smil", "application/smil"],
    [".smp", "application/studiom"],
    [".smz", "audio/x-smd"],
    [".snd", "audio/basic"],
    [".spc", "application/x-pkcs7-certificates"],
    [".spl", "application/futuresplash"],
    [".spr", "application/x-sprite"],
    [".sprite", "application/x-sprite"],
    [".sdp", "application/sdp"],
    [".spt", "application/x-spt"],
    [".src", "application/x-wais-source"],
    [".sst", "application/vnd.ms-pkicertstore"],
    [".stk", "application/hyperstudio"],
    [".stl", "application/vnd.ms-pkistl"],
    [".stm", "text/html"],
    [".svg", "image/svg+xml"],
    [".sv4cpio", "application/x-sv4cpio"],
    [".sv4crc", "application/x-sv4crc"],
    [".svf", "image/vnd"],
    [".svg", "image/svg+xml"],
    [".svh", "image/svh"],
    [".svr", "x-world/x-svr"],
    [".swf", "application/x-shockwave-flash"],
    [".swfl", "application/x-shockwave-flash"],
    [".t", "application/x-troff"],
    [".tad", "application/octet-stream"],
    [".talk", "text/x-speech"],
    [".tar", "application/x-tar"],
    [".taz", "application/x-tar"],
    [".tbp", "application/x-timbuktu"],
    [".tbt", "application/x-timbuktu"],
    [".tcl", "application/x-tcl"],
    [".tex", "application/x-tex"],
    [".texi", "application/x-texinfo"],
    [".texinfo", "application/x-texinfo"],
    [".tgz", "application/x-compressed"],
    [".thm", "application/vnd.eri.thm"],
    [".tif", "image/tiff"],
    [".tiff", "image/tiff"],
    [".tki", "application/x-tkined"],
    [".tkined", "application/x-tkined"],
    [".toc", "application/toc"],
    [".toy", "image/toy"],
    [".tr", "application/x-troff"],
    [".trk", "x-lml/x-gps"],
    [".trm", "application/x-msterminal"],
    [".tsi", "audio/tsplayer"],
    [".tsp", "application/dsptype"],
    [".tsv", "text/tab-separated-values"],
    [".ttf", "application/octet-stream"],
    [".ttz", "application/t-time"],
    [".txt", "text/plain"],
    [".uls", "text/iuls"],
    [".ult", "audio/x-mod"],
    [".ustar", "application/x-ustar"],
    [".uu", "application/x-uuencode"],
    [".uue", "application/x-uuencode"],
    [".vcd", "application/x-cdlink"],
    [".vcf", "text/x-vcard"],
    [".vdo", "video/vdo"],
    [".vib", "audio/vib"],
    [".viv", "video/vivo"],
    [".vivo", "video/vivo"],
    [".vmd", "application/vocaltec-media-desc"],
    [".vmf", "application/vocaltec-media-file"],
    [".vmi", "application/x-dreamcast-vms-info"],
    [".vms", "application/x-dreamcast-vms"],
    [".vox", "audio/voxware"],
    [".vqe", "audio/x-twinvq-plugin"],
    [".vqf", "audio/x-twinvq"],
    [".vql", "audio/x-twinvq"],
    [".vre", "x-world/x-vream"],
    [".vrml", "x-world/x-vrml"],
    [".vrt", "x-world/x-vrt"],
    [".vrw", "x-world/x-vream"],
    [".vts", "workbook/formulaone"],
    [".wav", "audio/x-wav"],
    [".wax", "audio/x-ms-wax"],
    [".wbmp", "image/vnd.wap.wbmp"],
    [".wcm", "application/vnd.ms-works"],
    [".wdb", "application/vnd.ms-works"],
    [".web", "application/vnd.xara"],
    [".wi", "image/wavelet"],
    [".wis", "application/x-InstallShield"],
    [".wks", "application/vnd.ms-works"],
    [".wm", "video/x-ms-wm"],
    [".wma", "audio/x-ms-wma"],
    [".wmd", "application/x-ms-wmd"],
    [".wmf", "application/x-msmetafile"],
    [".wml", "text/vnd.wap.wml"],
    [".wmlc", "application/vnd.wap.wmlc"],
    [".wmls", "text/vnd.wap.wmlscript"],
    [".wmlsc", "application/vnd.wap.wmlscriptc"],
    [".wmlscript", "text/vnd.wap.wmlscript"],
    [".wmv", "audio/x-ms-wmv"],
    [".wmx", "video/x-ms-wmx"],
    [".wmz", "application/x-ms-wmz"],
    [".wpng", "image/x-up-wpng"],
    [".wps", "application/vnd.ms-works"],
    [".wpt", "x-lml/x-gps"],
    [".wri", "application/x-mswrite"],
    [".wrl", "x-world/x-vrml"],
    [".wrz", "x-world/x-vrml"],
    [".ws", "text/vnd.wap.wmlscript"],
    [".wsc", "application/vnd.wap.wmlscriptc"],
    [".wv", "video/wavelet"],
    [".wvx", "video/x-ms-wvx"],
    [".wxl", "application/x-wxl"],
    [".x-gzip", "application/x-gzip"],
    [".xaf", "x-world/x-vrml"],
    [".xar", "application/vnd.xara"],
    [".xbm", "image/x-xbitmap"],
    [".xdm", "application/x-xdma"],
    [".xdma", "application/x-xdma"],
    [".xdw", "application/vnd.fujixerox.docuworks"],
    [".xht", "application/xhtml+xml"],
    [".xhtm", "application/xhtml+xml"],
    [".xhtml", "application/xhtml+xml"],
    [".xla", "application/vnd.ms-excel"],
    [".xlc", "application/vnd.ms-excel"],
    [".xll", "application/x-excel"],
    [".xlm", "application/vnd.ms-excel"],
    [".xls", "application/vnd.ms-excel"],
    [".xlsx",
      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"],
    [".xlt", "application/vnd.ms-excel"],
    [".xlw", "application/vnd.ms-excel"], [".xm", "audio/x-mod"],
    [".xml", "text/plain"], [".xml", "application/xml"],
    [".xmz", "audio/x-mod"], [".xof", "x-world/x-vrml"],
    [".xpi", "application/x-xpinstall"],
    [".xpm", "image/x-xpixmap"], [".xsit", "text/xml"],
    [".xsl", "text/xml"], [".xul", "text/xul"],
    [".xwd", "image/x-xwindowdump"], [".xyz", "chemical/x-pdb"],
    [".yz1", "application/x-yz1"],
    [".z", "application/x-compress"],
    [".zac", "application/x-zaurus-zac"],
    [".zip", "application/zip"], [".json", "application/json"]];

  /**
   * 根据文件后缀名获得对应的MIME类型。
   * @param file
   */
  public static getMimeTypeFromExtension(extension: string): string {
    let fileType = "*/*";

    if (extension == "") return fileType;
    // 在MIME和文件类型的匹配表中找到对应的MIME类型。
    for (let i = 0; i < MimeUtils.MIME_MapTable.length; i++) {
      if (extension === MimeUtils.MIME_MapTable[i][0])
        fileType = MimeUtils.MIME_MapTable[i][1];
    }
    return fileType;
  }
}